
#include <QCoreApplication>
#include <QDebug>
#include "OAIDefaultApi.h"
#include "OAIGetTypeList.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // OpenAPI::OAIDefaultApi("https", "upload.deepinos.org", 0);
    OpenAPI::OAIDefaultApi *api = new OpenAPI::OAIDefaultApi;
    // https 前缀(注意，不是 https 将因为 301 重定向代码导致无数据返回，json 将会为空)
    // upload.deepinos.org
    // 0为无端口，函数中代码示例: .arg(_port ? ":" + QString::number(_port) : "")
    api->setScheme("https");
    api->setHost("upload.deepinos.org");
    api->setPort(0);
    
    // 先绑定在请求对应接口时请求成功时会发射的信号，并进行处理
    QObject::connect(api, &OpenAPI::OAIDefaultApi::apiIndexGetTypeListGetSignal, &a, [](OpenAPI::OAIObject _t1){
        QTextStream out(stdout);        // 准备标准输出
        out << "GetSignal" << "\n";     // 如果请求成功将会打印此行
        
        QString json = _t1.asJson();;   // 尝试获取它的 json 字符串
        out << json << "\n";            // 打印 json 字符串

        QJsonObject obj = _t1.asJsonObject();   // 尝试获取它的 json 对像

        OpenAPI::OAIGetTypeList list;   // 获取分类列表的数据模型
        list.fromJsonObject(obj);       // 数据模型将从json对象中读取数据并填充自身

        // 获取数据模型的 `data` 成员，这是新的一组模型类，可从对应的模型函数中取对应的值
        QList<OpenAPI::OAIGetTypeList_data> datalist = list.getData();
        for (int i = 0; i < datalist.count(); i++)
        {
            int id = datalist[i].getId();               // 获取分类编号
            QString name = datalist[i].getName();       // 获取分类的名称

            // 这些内容应该再被填充到Gui图形化的 QComboBox 下，
            // 建议从此处收集数据后在函数结尾处以新的信号发送，确保达到解除耦合。
            // 正确使用信号将提升为可封装为库的可能性 -- 也许吧

            out << "> " << "id:" << id << ", name:" << name << "\n";

            // > id:1, name:游戏
            // > id:2, name:音乐
            // > id:3, name:网络
            // ...
        }
    });
    
    // 成功 apiIndexGetTypeListGetSignal
    // 失败 apiIndexGetTypeListGetSignalE
    api->apiIndexGetTypeListGet();
    api->setTimeOut(1000);  // 在此简单示例中没有意义，大型项目中另说

    return a.exec();
}
